package com.openlogic.logic.service.logic;

import java.util.List;
import java.util.Map;

import com.openlogic.api.logic.dto.RuleModelDto;
import com.openlogic.api.logic.dto.RuleSqlModelDto;
import com.openlogic.api.logic.entity.RuleModel;
import com.openlogic.api.logic.entity.RuleModelNodeMerge;

/**
* @ClassName: RuleModelDeployService
* @Description: 规则参数Service接口
* @author weiyongpeng
* @date 2024年7月14日 上午10:15:24
 */
public interface RuleModelService {
	
	/**
	* 描述：查询规则设计-参数列表
	* @Title: listRuleDesignParam
	* @param params
	* @return
	* @author weiyongpeng
	* @date  2024年9月16日 上午9:56:44
	 */
	List<RuleModelDto> listRuleDesignParam(Map<String, Object> params);

	/**
	* 描述：查询公共规则参数列表
	* @Title: listByCommonRuleParams
	* @param params
	* @return
	* @author weiyongpeng
	* @date  2024年9月15日 下午8:31:16
	 */
	List<Map<String,Object>> listByCommonRuleParams(Map<String, Object> params);
	
	/**
	* 描述：非决策流调试接口参数查询
	* @Title: listByDebugRuleParams
	* @param params
	* @return
	* @author weiyongpeng
	* @date  2024年10月28日 下午4:32:34
	 */
	List<Map<String,Object>> listByDebugRuleParams(Map<String, Object> params);

	/**
	* 描述：根据规则编码查询列表
	* @Title: listByRuleKey
	* @param ruleModel
	* @return
	* @author weiyongpeng
	* @date  2024年7月16日 下午4:11:27
	 */
	List<RuleModel> listByRuleKey(RuleModel ruleModel);
	
	/**
	* 描述：根据规则id查询规则涉及的参数
	* @Title: listByRuleModelId
	* @param ruleModelId
	* @return
	* @author weiyongpeng
	* @date  2024年9月20日 下午3:00:17
	 */
	List<RuleModel> listByRuleModelId(String ruleModelId);
	
	/**
	* 描述：根据sql参数名称查询sql参数
	* @Title: findSqlParamByName
	* @param sqlParamName
	* @return
	* @author weiyongpeng
	* @date  2024年11月30日 下午4:28:28
	 */
	RuleSqlModelDto findSqlParamByName(String sqlParamName);
	
	/**
	* 描述：查询非决策流使用参数
	* @Title: findRuleParamForH
	* @param params
	* @return
	* @author weiyongpeng
	* @date  2024年12月31日 上午8:19:04
	 */
	List<RuleModel> findRuleParamForH(Map<String, Object> params);

	/**
	* 描述：插入规则参数（旧）
	* @Title: insert
	* @param ruleModel
	* @author weiyongpeng
	* @date  2024年7月16日 下午4:03:17
	 */
	void insert(RuleModel ruleModel);
	
	/**
	* 描述：插入规则参数（新）
	* @Title: insertRuleParam
	* @param ruleModel
	* @author weiyongpeng
	* @date  2024年9月18日 下午1:46:15
	 */
	void insertRuleParam(RuleModel ruleModel);
	
	/**
	* 描述：批量插入规则参数
	* @Title: insertBatch
	* @param ruleModels
	* @author weiyongpeng
	* @date  2024年7月16日 下午7:16:57
	 */
	void insertBatch(List<RuleModel> ruleModels);
	
	/**
	* 描述：规则设计引用公共参数
	* @Title: insertCommonParam
	* @param ruleModelNodeMergeDto
	* @author weiyongpeng
	* @date  2024年9月16日 下午2:41:21
	 */
	void insertCommonParam(List<RuleModelNodeMerge> ruleModelNodeMergeDto);
	
	/**
	* 描述：规则设计添加私有变量
	* @Title: insertRuleDesignParam
	* @param ruleModel
	* @author weiyongpeng
	* @date  2024年9月20日 下午12:30:06
	 */
	void insertRuleDesignParam(RuleModel ruleModel);

	/**
	* 描述：修改规则参数
	* @Title: update
	* @param ruleModel
	* @author weiyongpeng
	* @date  2024年7月16日 下午4:27:30
	 */
	void update(RuleModel ruleModel);

	/**
	* 描述：删除规则参数 根据主键
	* @Title: delete
	* @param ruleModeId
	* @return
	* @author weiyongpeng
	* @date  2024年7月16日 下午4:38:31
	 */
	boolean delete(String ruleModeId);
	
	/**
	* 描述：删除规则参数
	* @Title: delete
	* @param ruleMode
	* @return
	* @author weiyongpeng
	* @date  2024年9月16日 上午9:32:59
	 */
	boolean delete(RuleModel ruleMode);
	
	/**
	 * 
	* 描述：根据规则key
	* @Title: deleteByRuleKey
	* @param ruleModelkey
	* @return
	* @author weiyongpeng
	* @date  2024年7月16日 下午7:09:47
	 */
	boolean deleteByRuleKey(String ruleModelkey);
	
	/**
	* 描述：删除节点与变量绑定关系
	* @Title: deleteByNodeId
	* @param nodeId
	* @return
	* @author weiyongpeng
	* @date  2024年9月21日 上午9:24:51
	 */
	boolean deleteByNodeId(String nodeId);

	/**
	* 描述：校验公共参数是否被规则链所引用
	* @Title: checkIsLinkModel
	* @param ruleModeId
	* @return
	* @author weiyongpeng
	* @date  2024年9月15日 下午9:02:05
	 */
	int checkIsLinkModel(String ruleModeId);

	/**
	* 描述：校验是否有已存在参数
	* @Title: checkIsExistsFact
	* @param modelIdentify
	* @return
	* @author weiyongpeng
	* @date  2024年9月15日 下午9:28:49
	 */
	Long checkIsExistsFact(String modelIdentify);
	
	/**
	* 描述：查询规则变量根据参数名称
	* @Title: getByName
	* @param ruleModel
	* @return
	* @author weiyongpeng
	* @date  2024年7月16日 下午3:43:33
	 */
	RuleModel checkRuleModel(RuleModel ruleModel, String type);

}
